--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vendor/rns_over_http/README-RU.md b960db2e8bf87b96c14f6421402a16798d7a9ded (b960db2e) Text, 6.71 KB
RNS-over-HTTP
Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения.
Границы пакетов на HTTP-теле используют то же упрощённое HDLC-фреймирование, что и T383838PipeInterface Reticulum, поэтому несколько пакетов могут передаваться в одном теле запроса или ответа без слияния.
Не-GitHub-зеркало. Кроме того, файлы проекта доступны в сети Reticulum по адресу T383838RNS-over-HTTP.
Обзор
RNS-over-HTTP создаёт двунаправленный транспортный уровень, используя простую клиент-серверную модель:
• Сервер: Запускается на машине с публичным IP-адресом и прослушивает HTTP-запросы.
• Клиент: Может находиться за файрволом или NAT, ему требуется только исходящий доступ в интернет.
Клиент опрашивает сервер с помощью HTTP POST-запросов, отправляя исходящие данные в теле запроса и получая входящие данные в теле ответа. Это делает трафик похожим на обычную веб-активность.
Как это работает
Интерфейс имитирует постоянное соединение, используя механизм, подобный long-polling:
1. Клиент отправляет HTTP POST на сервер с ожидающими HDLC-фреймами в теле запроса.
2. Сервер декодирует входящие пакеты для Reticulum и сразу возвращает исходящую очередь (тоже в HDLC) в теле ответа.
3. Клиент принимает ответ, декодирует фреймы и передаёт пакеты в Reticulum.
4. После настраиваемого интервала опроса клиент повторяет цикл.
Особенности
• Обход файрволов и DPI: Туннелирует трафик через стандартные порты HTTP/S (80/443).
• Двунаправленная связь: Полнодуплексная передача данных.
• Совместимое с Pipe фреймирование: HDLC FLAG/ESC как у T383838PipeInterface.
• Простая настройка: Python, T383838httpx, Hypercorn/aioquic для HTTP/2–3 и Reticulum (T383838rns).
• Надёжность: Повторное подключение с экспоненциальной задержкой.
• Гибкость: Настраиваемые MTU и интервал опроса.
• Совместимость с прокси: Caddy, Nginx и аналоги.
• Повторное использование соединений: keep-alive / мультиплексирование.
• HTTP/1.1, HTTP/2 и HTTP/3: T383838http_version = 1|2|3 (по умолчанию T3838381).
Начало работы
Требования
Установка
1. Установите зависимости через Poetry (из корня репозитория):
T282828
poetry install
2. Установите пользовательский интерфейс: скопируйте T383838HTTPInterface.py в каталог интерфейсов Reticulum, например T383838~/.reticulum/interfaces/.
Тесты
T282828
poetry run pytest -m Ta5d6ff"not live"
poetry run pytest -m live
Конфигурация
Добавьте блок интерфейса в T383838~/.reticulum/config на сервере и на клиенте. Поле T383838type должно совпадать с именем модуля (T383838HTTPInterface).
Конфигурация сервера
T282828
Tff7b72[[HTTP Server Interface]]
Te6edf3type Tff7b72= Ta5d6ffHTTPInterface
Te6edf3enabled Tff7b72= Ta5d6fftrue
Te6edf3mode Tff7b72= Ta5d6ffserver
Te6edf3listen_host Tff7b72= Ta5d6ff0.0.0.0
Te6edf3listen_port Tff7b72= Ta5d6ff8080
Te6edf3mtu Tff7b72= Ta5d6ff4096
Te6edf3check_user_agent Tff7b72= Ta5d6fftrue
Te6edf3user_agent Tff7b72= Ta5d6ffRNS-HTTP-Tunnel/1.0
Конфигурация клиента
T282828
Tff7b72[[HTTP Client Interface]]
Te6edf3type Tff7b72= Ta5d6ffHTTPInterface
Te6edf3enabled Tff7b72= Ta5d6fftrue
Te6edf3mode Tff7b72= Ta5d6ffclient
Te6edf3server_url Tff7b72= Ta5d6ffhttp://your-server-ip-or-domain:8080/
Te6edf3poll_interval Tff7b72= Ta5d6ff0.1
Te6edf3mtu Tff7b72= Ta5d6ff4096
Te6edf3user_agent Tff7b72= Ta5d6ffRNS-HTTP-Tunnel/1.0
Параметры конфигурации
Общие
• T383838mtu: максимальный размер пакета в байтах (по умолчанию T3838384096)
• T383838user_agent: строка User-Agent (по умолчанию T383838RNS-HTTP-Tunnel/1.0)
Режим сервера
• T383838mode = server
• T383838listen_host (по умолчанию T3838380.0.0.0)
• T383838listen_port (по умолчанию T3838388080)
• T383838check_user_agent (по умолчанию T383838true)
• T383838serve_html_page / T383838html_file_path: необязательная HTML-страница на GET T383838/
Режим клиента
• T383838mode = client
• T383838server_url (обязателен)
• T383838poll_interval (по умолчанию T3838380.1)
• T383838http_version = 1|2|3 (по умолчанию T3838381)
• для T3838382 и T3838383: T383838https://, на сервере T383838tls_certfile / T383838tls_keyfile
• T383838tls_verify / T383838tls_ca_certs на клиенте
• T383838pool_connections / T383838pool_maxsize / T383838keepalive_timeout
Обратный прокси (пример Caddy)
T282828
example.yourdomain.com {
reverse_proxy 127.0.0.1:8080
header {
-Server
X-Content-Type-Options nosniff
}
}
Безопасность
• Используйте HTTPS там, где возможно.
• По умолчанию сервер проверяет User-Agent. Задайте одинаковый T383838user_agent на обеих сторонах или отключите проверку через T383838check_user_agent = false.
Лицензия
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────